//传统面向对象
//类是对象的属性和方法模板
/*class dog{
    //构造函数相同
constructor(type,color){
    this.type=type;
    this.color=color
}
makesound(){
    console.log('汪汪汪');
}
eat(){
    console.log('骨头来一根');
}
}
const xb=new dog('土狗','白色');
const smy=new dog('萨摩耶','白色');
console.log(xb.type);
// xb Dog.prototype 之间有关系
xb.makesound();
console.log(xb.constructor==smy.constructor);*/
function Dog(type,color){
this.type=type;
this.color=color;
}
//任何函数都有prototype对象 方法
//Dog.prototype xb smy 有什么关系
//共同的实例，共同的方法
/*Dog.prototype.makesound=function(){
console.log('汪汪汪');
}*/
Dog.prototype={
    makesound:function(){
console.log(`${this.type}汪汪汪`);
    }
}
Dog.prototype.eat=function(){
    console.log('骨头来一根');
}
// 构造函数（属性） 原型对象（方法） 实例
//1.把构造函数运行了一下
//2.以new 的方式运行了this 
const xb=new Dog('土狗','白色');
const smy=new Dog('萨摩耶','白色');
console.log(xb instanceof Dog);
//私有属性
// 实例对象都有一个_proto_指向构造函数的prototype对象
console.log(xb._proto_,'....');
//构造器没有对应的属性，可以去原型对象(prototype)对象上查找
console.log(xb._proto_.constructor);
console.log(xb.type);
// xb Dog.prototype 之间有关系
xb.makesound();
console.log(xb.constructor==smy.constructor);